package com.doyoulike.service.table;

import com.doyoulike.dao.business.GenDataBaseDao;
import com.doyoulike.entity.DataBaseColumn;
import com.doyoulike.entity.GenTable;
import com.doyoulike.util.ColumnUtil;
import com.doyoulike.vo.in.GetTableListVO;
import com.doyoulike.vo.out.DataBaseColumnVO;
import com.doyoulike.vo.out.GenTableVO;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class GenDataBaseService {

    @Autowired
    GenDataBaseDao genDataBaseDao;

    /**
     * 获取当前使用的数据库的表
     * @param getTableListVO
     * @return
     */
    public PageInfo getTableList(GetTableListVO getTableListVO) {
        // 一、设置分页参数
        Page<GenTable> page = PageHelper.startPage(getTableListVO.getPageNumber(), getTableListVO.getPageSize());

        // 二、执行查询
        List<GenTable> tables = genDataBaseDao.findTableList(getTableListVO);
        if (tables.isEmpty()) return PageInfo.of(new ArrayList<>());

        // 三、将查询结果转换为 VO
        List<GenTableVO> genTableVOList = new ArrayList<>();
        for (GenTable table : tables) {
            GenTableVO vo = new GenTableVO();
            BeanUtils.copyProperties(table,vo);
            genTableVOList.add(vo);
        }

        // 四、组装返回数据并返回
        PageInfo<GenTableVO> pageInfo = new PageInfo<GenTableVO>(genTableVOList);
        pageInfo.setTotal(page.getTotal());
        return pageInfo;
    }

    /**
     * 根据表名称查询列
     * @param tableName
     * @return
     */
    public List<DataBaseColumnVO> getTableColumnList(String tableName) {
        // 根据表名称查询列信息
        List<DataBaseColumn> columnList = genDataBaseDao.findTableColumnList(tableName);

        // 初始化列信息（设置Java数据类型、Mybatis数据类型、Java字段名等）
        ColumnUtil.initColumn(columnList);

        // 将 List<DataBaseColumn> 转为 List<GenTableColumnVO>
        List<DataBaseColumnVO> reslt = new ArrayList<>(columnList.size());
        for (DataBaseColumn column : columnList) {
            DataBaseColumnVO vo = new DataBaseColumnVO();
            BeanUtils.copyProperties(column,vo);
            if (StringUtils.isNotBlank(column.getStrMaxLength())) {
                vo.setValueLength(column.getStrMaxLength());
            }
            if (StringUtils.isNotBlank(column.getIntMaxLength())) {
                vo.setValueLength(column.getIntMaxLength());
            }
            reslt.add(vo);
        }

        return reslt;
    }
}
